package com.soft.javase.day06;

import java.math.BigInteger;
import java.util.Scanner;

/**
 * @author yzh
 * @desc TODO
 * @date 2025/4/24
 */
public class BigIntegerDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入十六进制数值: ");
        String hexStr = sc.nextLine().trim();

        String decimalStr = hexToDecimal(hexStr);
        System.out.println("十进制值为: " + decimalStr);
    }

    public static String hexToDecimal(String hexStr) {
        // 检查输入是否为空
        if (hexStr == null || hexStr.isEmpty()) {
            return "0";
        }

        // 处理前缀
        if (hexStr.startsWith("0x") || hexStr.startsWith("0X")) {
            hexStr = hexStr.substring(2);
        }

        // 只有前缀
        if (hexStr.isEmpty()) {
            return "0";
        }

        hexStr = hexStr.toLowerCase();
        BigInteger decimal = BigInteger.ZERO;

        // 计算16的幂次
        BigInteger power = BigInteger.ONE; // 从最低位开始，初始16^0=1

        // 从低位到高位处理
        for (int i = hexStr.length() - 1; i >= 0; i--) {
            char c = hexStr.charAt(i);
            int digit;

            // 验证并转换字符
            if (c >= '0' && c <= '9') {
                digit = c - '0';
            } else if (c >= 'a' && c <= 'f') {
                digit = 10 + (c - 'a');
            } else {
                return "0"; // 非法字符直接返回0
            }

            // 累加当前位的值
            decimal = decimal.add(
                    BigInteger.valueOf(digit).multiply(power));

            // 计算下一位的权值
            power = power.multiply(BigInteger.valueOf(16));
        }

        return decimal.toString();
    }
}
